home *** CD-ROM | disk | FTP | other *** search
/ Programming Windows 95 / Programming Windows 95.iso / code / CHAP12 / PAGE2.C < prev    next >
C/C++ Source or Header  |  1995-12-31  |  9KB  |  286 lines

  1. /*----------------------------------
  2.    PAGE2.C -- Property sheet page 2
  3.               (c) Paul Yao, 1996
  4.   ----------------------------------*/
  5. #include <windows.h>
  6. #include <commctrl.h>
  7. #include "property.h"
  8. #include "notify.h"
  9. #include "helper.h"
  10.  
  11. static LPDWORD pTheExStyles ;
  12. extern BOOL bWizard ;
  13. extern HWND hwndMain ;
  14. extern HWND hwndModeless ;
  15.  
  16. DWORD FetchExStyles (HWND hwndDlg) ;
  17.  
  18. //-------------------------------------------------------------------
  19. UINT CALLBACK 
  20. ExStylePageProc (HWND  hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp)
  21.      {
  22.      switch (uMsg)
  23.           {
  24.           case PSPCB_CREATE :
  25.                // Store pointer to extended style data
  26.                pTheExStyles = (LPDWORD) ppsp->lParam ;
  27.                return TRUE ;
  28.  
  29.           case PSPCB_RELEASE :
  30.                break ;
  31.           }
  32.  
  33.      return 0 ;
  34.      }
  35.  
  36. //-------------------------------------------------------------------
  37. BOOL CALLBACK 
  38. ExStyleDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
  39.      {
  40.      switch (msg)
  41.           {
  42.           case WM_INITDIALOG :
  43.                {
  44.                BOOL bCheck ;
  45.                DWORD dwOrigStyle = *pTheExStyles ;
  46.  
  47.                bCheck = (dwOrigStyle & WS_EX_CLIENTEDGE) ;
  48.                SetButtonCheck (hwndDlg, IDC_CLIENTEDGE, bCheck) ;
  49.  
  50.                bCheck = (dwOrigStyle & WS_EX_CONTEXTHELP) ;
  51.                SetButtonCheck (hwndDlg, IDC_CONTEXTHELP, bCheck) ;
  52.  
  53.                bCheck = (dwOrigStyle & WS_EX_DLGMODALFRAME) ;
  54.                SetButtonCheck (hwndDlg, IDC_DLGMODALFRAME, bCheck) ;
  55.  
  56.                bCheck = (dwOrigStyle & WS_EX_OVERLAPPEDWINDOW) ;
  57.                SetButtonCheck (hwndDlg, IDC_EXOVERLAPPED, bCheck) ;
  58.  
  59.                bCheck = (dwOrigStyle & WS_EX_PALETTEWINDOW) ;
  60.                SetButtonCheck (hwndDlg, IDC_PALETTE, bCheck) ;
  61.  
  62.                bCheck = (dwOrigStyle & WS_EX_STATICEDGE) ;
  63.                SetButtonCheck (hwndDlg, IDC_STATICEDGE, bCheck) ;
  64.  
  65.                bCheck = (dwOrigStyle & WS_EX_TOOLWINDOW) ;
  66.                SetButtonCheck (hwndDlg, IDC_TOOLWINDOW, bCheck) ;
  67.  
  68.                bCheck = (dwOrigStyle & WS_EX_WINDOWEDGE) ;
  69.                SetButtonCheck (hwndDlg, IDC_WINDOWEDGE, bCheck) ;
  70.  
  71.                bCheck = (dwOrigStyle & WS_EX_ACCEPTFILES) ;
  72.                SetButtonCheck (hwndDlg, IDC_ACCEPTFILES, bCheck) ;
  73.  
  74.                bCheck = (dwOrigStyle & WS_EX_APPWINDOW) ;
  75.                SetButtonCheck (hwndDlg, IDC_APPWINDOW, bCheck) ;
  76.  
  77.                bCheck = (dwOrigStyle & WS_EX_TOPMOST) ;
  78.                SetButtonCheck (hwndDlg, IDC_TOPMOST, bCheck) ;
  79.  
  80.                bCheck = (dwOrigStyle & WS_EX_TRANSPARENT) ;
  81.                SetButtonCheck (hwndDlg, IDC_TRANSPARENT, bCheck) ;
  82.  
  83.                bCheck = (dwOrigStyle & WS_EX_CONTROLPARENT) ;
  84.                SetButtonCheck (hwndDlg, IDC_CONTROLPARENT, bCheck) ;
  85.  
  86.                bCheck = (dwOrigStyle & WS_EX_MDICHILD) ;
  87.                SetButtonCheck (hwndDlg, IDC_MDICHILD, bCheck) ;
  88.  
  89.                bCheck = (dwOrigStyle & WS_EX_NOPARENTNOTIFY) ;
  90.                SetButtonCheck (hwndDlg, IDC_NOPARENTNOTIFY, bCheck) ;
  91.  
  92.                return TRUE ;
  93.                }
  94.  
  95.           case WM_COMMAND :
  96.                {
  97.                WORD wNotifyCode = HIWORD (wParam) ;
  98.                WORD wID = LOWORD (wParam) ;
  99.                HWND hwndSheet ;
  100.  
  101.                switch (wID)
  102.                     {
  103.                     case IDC_CLIENTEDGE :
  104.                     case IDC_CONTEXTHELP :
  105.                     case IDC_DLGMODALFRAME :
  106.                     case IDC_EXOVERLAPPED :
  107.                     case IDC_PALETTE :
  108.                     case IDC_STATICEDGE :
  109.                     case IDC_TOOLWINDOW :
  110.                     case IDC_WINDOWEDGE :
  111.                     case IDC_ACCEPTFILES :
  112.                     case IDC_APPWINDOW :
  113.                     case IDC_TOPMOST :
  114.                     case IDC_TRANSPARENT :
  115.                     case IDC_CONTROLPARENT :
  116.                     case IDC_MDICHILD :
  117.                     case IDC_NOPARENTNOTIFY :
  118.                          hwndSheet = GetParent (hwndDlg) ;
  119.                          PropSheet_Changed (hwndSheet, hwndDlg) ;
  120.                          break ;
  121.                     }
  122.                return TRUE ;
  123.                }
  124.  
  125.           case WM_HELP :
  126.                // Catch F1 key strike
  127.                MessageBox (hwndDlg, "WM_HELP Message Received",
  128.                            "ExStyleDlgProc", MB_OK) ;
  129.                return TRUE ;
  130.  
  131.           case WM_NOTIFY :
  132.                {
  133.                LPNMHDR pnmh = (LPNMHDR) lParam ;
  134.  
  135.                // Handle Finish button on wizard page
  136.                if (pnmh->code == PSN_WIZFINISH)
  137.                     {
  138.                     HWND hwndPS ;
  139.                     
  140.                     hwndPS = GetParent (hwndDlg) ;
  141.                     PropSheet_Apply (hwndPS) ;
  142.                     return TRUE ;
  143.                     }
  144.  
  145.                // Handle OK and Apply buttons
  146.                if (pnmh->code == PSN_APPLY || pnmh->code == PSN_RESET)
  147.                     {
  148.                     HWND hwndPS ;
  149.                     HWND hwndActive ;
  150.  
  151.                     // Overwrite current style value
  152.                     *pTheExStyles = FetchExStyles (hwndDlg) ;
  153.  
  154.                     // Tell main window to re-create child window
  155.                     hwndPS = GetParent (hwndDlg) ;
  156.                     hwndActive = PropSheet_GetCurrentPageHwnd (hwndPS) ;
  157.  
  158.                     // Only re-create if we're the active page
  159.                     if (hwndDlg == hwndActive)
  160.                          PostMessage (hwndMain, PM_CREATEWINDOW, 0, 0L) ;
  161.                     }
  162.  
  163.                // Destroy modeless dialog on OK or Cancel
  164.                if ((IsWindowEnabled (hwndMain)) &&
  165.                    (pnmh->code == PSN_APPLY || pnmh->code == PSN_RESET))
  166.                     {
  167.                     LPPSHNOTIFY psh = (LPPSHNOTIFY) lParam ;
  168.                     HWND hwndPropSheet ;
  169.  
  170.                     // Ignore Apply button
  171.                     if (pnmh->code == PSN_APPLY && psh->lParam == 0)
  172.                          return TRUE ;
  173.  
  174.                     // Clicking OK or Cancel, destroy property sheet
  175.                     hwndPropSheet = GetParent (hwndDlg) ;
  176.                     DestroyWindow (hwndPropSheet) ;
  177.                     hwndModeless = NULL ;
  178.                }
  179.  
  180.                // Enable Back and Finish buttons on wizard page
  181.                if (bWizard && pnmh->code == PSN_SETACTIVE)
  182.                     {
  183.                     HWND hwndSheet = GetParent (hwndDlg) ;
  184.                     PropSheet_SetWizButtons (hwndSheet, PSWIZB_BACK |
  185.                                                         PSWIZB_FINISH) ;
  186.                     }
  187.  
  188.                // Support for Help button
  189.                if (pnmh->code == PSN_HELP)
  190.                     {
  191.                     MessageBox (hwndDlg, "PSN_HELP Notification Received",
  192.                                 "ExStyleDlgProc", MB_OK) ;
  193.                     }
  194.  
  195.                return TRUE ;
  196.                }
  197.  
  198.           default :
  199.                return FALSE ;
  200.           }
  201.      }
  202.  
  203. //-------------------------------------------------------------------
  204. DWORD FetchExStyles (HWND hwndDlg)
  205.      {
  206.      DWORD dwStyle = 0L ;
  207.  
  208.      if (QueryButtonCheck (hwndDlg, IDC_CLIENTEDGE))
  209.           {
  210.           dwStyle |= WS_EX_CLIENTEDGE ;
  211.           }
  212.  
  213.      if (QueryButtonCheck (hwndDlg, IDC_CONTEXTHELP))
  214.           {
  215.           dwStyle |= WS_EX_CONTEXTHELP ;
  216.           }
  217.  
  218.      if (QueryButtonCheck (hwndDlg, IDC_DLGMODALFRAME))
  219.           {
  220.           dwStyle |= WS_EX_DLGMODALFRAME ;
  221.           }
  222.  
  223.      if (QueryButtonCheck (hwndDlg, IDC_EXOVERLAPPED))
  224.           {
  225.           dwStyle |= WS_EX_OVERLAPPEDWINDOW ;
  226.           }
  227.  
  228.      if (QueryButtonCheck (hwndDlg, IDC_PALETTE))
  229.           {
  230.           dwStyle |= WS_EX_PALETTEWINDOW ;
  231.           }
  232.  
  233.      if (QueryButtonCheck (hwndDlg, IDC_STATICEDGE))
  234.           {
  235.           dwStyle |= WS_EX_STATICEDGE ;
  236.           }
  237.  
  238.      if (QueryButtonCheck (hwndDlg, IDC_TOOLWINDOW))
  239.           {
  240.           dwStyle |= WS_EX_TOOLWINDOW ;
  241.           }
  242.  
  243.      if (QueryButtonCheck (hwndDlg, IDC_WINDOWEDGE))
  244.           {
  245.           dwStyle |= WS_EX_WINDOWEDGE ;
  246.           }
  247.  
  248.      if (QueryButtonCheck (hwndDlg, IDC_ACCEPTFILES))
  249.           {
  250.           dwStyle |= WS_EX_ACCEPTFILES ;
  251.           }
  252.  
  253.      if (QueryButtonCheck (hwndDlg, IDC_APPWINDOW))
  254.           {
  255.           dwStyle |= WS_EX_APPWINDOW ;
  256.           }
  257.  
  258.      if (QueryButtonCheck (hwndDlg, IDC_TOPMOST))
  259.           {
  260.           dwStyle |= WS_EX_TOPMOST ;
  261.           }
  262.  
  263.      if (QueryButtonCheck (hwndDlg, IDC_TRANSPARENT))
  264.           {
  265.           dwStyle |= WS_EX_TRANSPARENT ;
  266.           }
  267.  
  268.      if (QueryButtonCheck (hwndDlg, IDC_CONTROLPARENT))
  269.           {
  270.           dwStyle |= WS_EX_CONTROLPARENT ;
  271.           }
  272.  
  273.      if (QueryButtonCheck (hwndDlg, IDC_MDICHILD))
  274.           {
  275.           dwStyle |= WS_EX_MDICHILD ;
  276.           }
  277.  
  278.      if (QueryButtonCheck (hwndDlg, IDC_NOPARENTNOTIFY))
  279.           {
  280.           dwStyle |= WS_EX_NOPARENTNOTIFY ;
  281.           }
  282.  
  283.  
  284.      return dwStyle ;
  285.      }
  286.